home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbtrace.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-02-16  |  4.1 KB  |  156 lines

  1. (*===========================================================================*)
  2. (* Trace/debuger                                                             *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1991 by H. Roy Engehausen.  All rights reserved.  *)
  5. (*                                                                           *)
  6. (*===========================================================================*)
  7.  
  8. UNIT BBTRACE;
  9.  
  10. INTERFACE
  11.  
  12.   PROCEDURE trace_data( event : STRING;  num : LONGINT;
  13.                         place : POINTER; data_in : STRING);
  14.  
  15. IMPLEMENTATION
  16.  
  17. USES
  18.   DOS,
  19.   bbbug,
  20.   bbdummy,
  21.   bbmisc3,
  22.   bbmisc4;
  23.  
  24. {$UNDEF DEBUG} (* Controls handle debugging *)
  25.  
  26. (*===========================================================================*)
  27. (* Subroutine to calculate number of handles                                 *)
  28. (*===========================================================================*)
  29.  
  30. {$IFDEF DEBUG}
  31.  
  32. VAR
  33.   f_a : ARRAY [1..18] OF TEXT;
  34.  
  35. FUNCTION n_handles: BYTE;
  36.   VAR
  37.     i   : INTEGER;
  38.     f_n : BYTE;
  39.     m_n : BYTE;
  40.  
  41.   BEGIN;
  42.  
  43.     f_n := 0;
  44.  
  45.     {$I-}
  46.  
  47.     REPEAT
  48.  
  49.       f_n := f_n + 1;
  50.  
  51.       ASSIGN(f_a[f_n], 'X.X');
  52.  
  53.       RESET (f_a[f_n]);
  54.  
  55.       i := IORESULT;
  56.  
  57.     UNTIL (i <> 0) OR (f_n = 18);
  58.  
  59.     {$I+}
  60.  
  61.     IF i <> 4 THEN
  62.       BEGIN;
  63.         WRITELN('Unexpected crash -- ', i);
  64.         HALT;
  65.       END;
  66.  
  67.     m_n := f_n - 1;
  68.  
  69.     n_handles := m_n;
  70.  
  71.     f_n := 0;
  72.  
  73.     WHILE f_n < m_n DO
  74.       BEGIN;
  75.         INC(f_n);
  76.         CLOSE(f_a[f_n]);
  77.       END;
  78.  
  79.   END;
  80.  
  81. {$ENDIF}
  82.  
  83. (*===========================================================================*)
  84. (* Main trace routine                                                        *)
  85. (*===========================================================================*)
  86.  
  87. PROCEDURE trace_data( event : STRING;  num : LONGINT;
  88.                       place : POINTER; data_in : STRING);
  89.  
  90.   TYPE
  91.     p_f = ^textrec;
  92.  
  93.   VAR
  94.     h  : WORD;
  95.     p  : p_f;
  96.     tp : POINTER;
  97.  
  98.   BEGIN;
  99.  
  100.     (*-----------------------------------------------------------------------*)
  101.     (* If to tracing then leave                                              *)
  102.     (*-----------------------------------------------------------------------*)
  103.  
  104.     IF NOT opt_block.opt_trace THEN
  105.       EXIT;
  106.  
  107.     (*-----------------------------------------------------------------------*)
  108.     (* Find out who called us                                                *)
  109.     (*-----------------------------------------------------------------------*)
  110.  
  111.     tp := called_by(1);
  112.  
  113.     (*-----------------------------------------------------------------------*)
  114.     (* Write the trace file                                                  *)
  115.     (*-----------------------------------------------------------------------*)
  116.  
  117.     WRITELN(trace_file^, a2x(SEG(tp^)), ':', a2x(OFS(tp^)),
  118.                          active_tcb^.tcb_number,
  119.                          event,
  120.                          num:8,
  121.                          ' ',
  122.                          a2x(SEG(place^)), ':', a2x(OFS(place^)),
  123.                          data_in);
  124.  
  125.     (*-----------------------------------------------------------------------*)
  126.     (* Show handle information as needed                                     *)
  127.     (*-----------------------------------------------------------------------*)
  128.  
  129.     {$IFDEF DEBUG}
  130.         IF place <> NIL THEN
  131.           BEGIN;
  132.             p := place;
  133.             h := p^.handle;
  134.           END
  135.         ELSE
  136.           h := 0;
  137.  
  138.         WRITELN(trace_file^, 'Handle = ', h, ' -- Number left = ', n_handles);
  139.     {$ENDIF}
  140.  
  141.     (*-----------------------------------------------------------------------*)
  142.     (* Bumb trace count and close file if needed                             *)
  143.     (*-----------------------------------------------------------------------*)
  144.  
  145.     IF trace_count < 5 THEN
  146.       INC(trace_count)
  147.     ELSE
  148.       BEGIN;
  149.         trace_count := 0;
  150.         flushdosfile(trace_file);
  151.       END;
  152.  
  153.   END;
  154.  
  155. END.
  156.